package okhttp;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

// https://blog.csdn.net/qq_29152241/article/details/82011539
public class Demo3 {

	public static void main(String[] args) throws IOException {
		int cacheSize = 10 * 1024 * 1024; // 10 MiB
		//需要指定一个私有目录,以及缓存限制的大小,官方给出的限制是10MB
		Cache cache = new Cache(new File("E:/zs l/cache"), cacheSize);
		// 首先创建OkHttpClient对象，OkHttpClient是okhttp3框架的客户端，用于发送http请求（Requests）和读取读取交易返回数据（Responses）。官方建议使用单例创建OkHttpClient，即一个进程中只创建一次即可，以后的每次交易都使用该实例发送交易。这是因为OkHttpClient拥有自己的连接池和线程池，这些连接池和线程池可以重复使用，这样做利于减少延迟和节省内存，如果咱们每次发交易都创建一个OkHttpClient的话，将会浪费很多内存资源
		OkHttpClient client = new OkHttpClient.Builder().readTimeout(1, TimeUnit.SECONDS).build();
		// 可以看到在创建Call对象时候传进去了一个Request对象，Request对象表示用户的交易请求参数
		//Request request = new Request.Builder().url("http://127.0.0.1:8080/cache/test1?name=zsl&age=12#c1").build();
		Request request = new Request.Builder().url("http://127.0.0.1:8083/testadd").build();
		// 一个Call对象表示一次请求，每一次交易请求都会生产一个新的Call，Call其实是一个接口对象，它的具体实现类是RealCall
		Call call = client.newCall(request);
		try {
			//1.同步请求方式
			Response response = call.execute();
			// 读取完数据之后才会放入cache
			System.out.println(new String(response.body().bytes()));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
